package net.lzzy.practicesapi1.repositories;

import net.lzzy.practicesapi1.entities.Course;
import net.lzzy.practicesapi1.entities.User;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.UUID;

/**
 * @author lyz
 */
public interface CourseRepository extends JpaRepository<Course, UUID> {
    List<Course> findAllByOrderByUpdateTimeDesc();

    /**
     *
     * @param .
     * @return 分页查询
     */
    List<Course> findAllByOrderByUpdateTimeDesc(PageRequest pageRequest);

    /**
     *
     * @param open .
     * @return 查找所有开放和未开放的课程，open 是否开放课程
     */
    List<Course> findCoursesByOpenEqualsOrderByUpdateTimeDesc(boolean open);

    /**
     *
     * @param pageable ，
     * @param open 分页查找开放和未开放的课程
     * @return 分页开放
     */
    List<Course> findCoursesByOpenEqualsOrderByUpdateTimeDesc(Pageable pageable, boolean open);

    /**
     * 返回course表所有数据记录
     * @return 用户记录数
     */
     Integer countAllBy();

    /**
     * 返回开放/未开放课程的数量
     * @param open 是否开放
     * @return 数量
     */
     Integer countCoursesByOpenEquals(boolean open);

    /**
     *
     * @param id 教师id
     * @return 教师课程集合
     */
     List<Course> findCoursesByTeacherIdEqualsOrderByCreateTime(UUID id);

    /**
     *  查找包含某学生所有开放课程
     * @param student 该学生对象
     * @param open 是否开放课程
     * @return 返回符合条件的集合
     */
     List<Course> findCoursesByStudentsContainsAndOpenOrderByUpdateTimeDesc(User student, boolean open);
}
